<?php

/**
 * Entité modèle : Table des langages
 * Représente l'ensemble des langages disponibles
 * 
 * <b>Structure :</b>
 * <ul>
 *  <li>id</li>
 *  <li>code</li>
 *  <li>actif</li>
 * </ul>
 * 
 * @author Cyril Souti
 * @version 1.0
 * @package models
 *
 */
class Models_Core_Langage extends Models_TableGite
{
	protected $_name = 'core_langage';
	
	const SQL_SELECT_LANGUE = 'SELECT id, code FROM core_langage WHERE actif = true';
	const SQL_SELECT_LANGUE_PROCHE = 'SELECT `code` FROM `core_langage` WHERE `actif` = 1 AND `code` LIKE ? ';
	const NB_CARACTERE_PROCHE = 2;

	/**
	 * Retourne les langages actifs (disponibles de l'application
	 * tel que identifiant => code
	 * 
	 * @return array(string=>string) le langages actifs
	 */
	public static function getLangagesActifs() {
		return Manager::getDbGiteNouette()->fetchPairs(self::SQL_SELECT_LANGUE);
	}

	/**
	 * Retourne un code langage disponible et proche
	 * de celui donné
	 * exemple : en_US => en_GB
	 * 
	 * @param string $code un code langage
	 * @return string le code langage disponible et proche null si non trouvé
	 */
	public static function getCodeLangageProche($code)
	{
		if (is_string($code) && (strlen($code) >= self::NB_CARACTERE_PROCHE)) {
			$expression = '%'.substr($code, 0, self::NB_CARACTERE_PROCHE).'%';
			$result = Manager::getDbGiteNouette()->fetchCol(self::SQL_SELECT_LANGUE_PROCHE, $expression);
			if (count($result) >= 1) {
				return $result[0];
			}
		}
		return null;
	}
	
	public static function getTraductions()
	{
		$langages = self::getLangagesActifs();
		$traductions = array();
		
		foreach ($langages as $id => $code) {
			$traductions[$code] = Models_Core_TraductionKey::getTraductions($id);
		}
		
		return $traductions;
	}
}